package studio7i.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import studio7i.excepcion.DAOExcepcion;
import studio7i.modelo.Local;
import studio7i.modelo.Sala;
import studio7i.modelo.Usuario;
import studio7i.util.ConexionBD;

public class UsuarioDAO extends BaseDAO {

	public Usuario insertar(Usuario usu) throws DAOExcepcion {
		
		//System.out.println("UsuarioDAO: insertar()");
		String query = "INSERT INTO USUARIO (nombres,dni,email,tipoUsuario,usuario_login,clave) VALUES (?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			//con.setAutoCommit(false);
			stmt = con.prepareStatement(query);
			
			stmt.setString(1,usu.getNombres());
			stmt.setString(2,usu.getDni());
			stmt.setString(3,usu.getEmail());
			stmt.setString(4,usu.getTipoUsuario());
			stmt.setString(5,usu.getUsuario_login());
			stmt.setString(6,usu.getClave());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
/*
			int idp = 0;
			query = "SELECT LAST_INSERT_ID()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				idp = rs.getInt(1);
			}
			usu.setIdUsuario(idp);
/*
			for (Respuesta ped : vo.getRespuestas()) {
				query = "INSERT INTO respuesta(texto, idpregunta) VALUES (?,?)";
				stmt = con.prepareStatement(query);
				
				stmt.setString(1, ped.getTexto());
				stmt.setInt(2, idp);
				
				int u = stmt.executeUpdate();
				if (u != 1) {
					throw new SQLException("No se pudo insertar");
				}
				int idd = 0;
				query = "SELECT LAST_INSERT_ID()";
				stmt = con.prepareStatement(query);
				rs = stmt.executeQuery();
				if (rs.next()) {
					idd = rs.getInt(1);
				}
				ped.setIdRespuesta(idd);
			}
			con.commit();			*/
		} catch (SQLException e) {
			/*try {
				con.rollback();
			} catch (SQLException e1) {
				throw new DAOExcepcion(e.getMessage());
			}*/
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			/*try {
				con.setAutoCommit(true);
			} catch (SQLException e) {
				throw new DAOExcepcion(e.getMessage());
			}*/
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return usu;
	}

	public Collection<Usuario> buscarPorDato(String dato, String campo) throws DAOExcepcion {
		
		String query = "SELECT * FROM USUARIO WHERE " + campo + " like " + dato;
		Collection<Usuario> lista = new ArrayList<Usuario>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null, rs_aux = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			//stmt.setString(1, "%" + dato + "%");
			rs = stmt.executeQuery();
			rs_aux=rs;
			if (!rs_aux.next())
				lista=null;
			while (rs.next()) {
				Usuario usu = new Usuario();
				usu.setNombres(rs.getString("nombres"));
				lista.add(usu);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
	public Collection<Usuario>listar() throws DAOExcepcion {
		Collection<Usuario> c = new ArrayList<Usuario>();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		String strsql="";
		
		try {
			con = ConexionBD.obtenerConexion();			
			strsql ="";
			strsql +="SELECT * FROM USUARIO";
				stmt = con.prepareStatement(strsql);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Usuario oUsuario=new Usuario();
				
				oUsuario.setIdUsuario(rs.getInt("IDUSUARIO"));
				oUsuario.setNombres(rs.getString("NOMBRES"));
				oUsuario.setDni(rs.getString("DNI"));
				oUsuario.setEmail(rs.getString("EMAIL"));
				oUsuario.setTipoUsuario(rs.getString("TIPOUSUARIO"));
				oUsuario.setUsuario_login(rs.getString("USUARIO_LOGIN"));
				oUsuario.setClave(rs.getString("CLAVE"));				
				
				c.add(oUsuario);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;	

	}
	
	public Collection<Usuario> buscarporUserPwd(Usuario entity) throws DAOExcepcion {
		String query = "select * from usuario where usuario_login=? and clave=?";
		Collection<Usuario> List = new ArrayList<Usuario>();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try{
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,entity.getUsuario_login());
			stmt.setString(2,entity.getClave());
			
			rs = stmt.executeQuery();
			
			while (rs.next()) {
				Usuario vo = new Usuario();
				vo.setIdUsuario(rs.getInt("IdUsuario"));
				vo.setNombres(rs.getString("nombres"));
				vo.setUsuario_login(rs.getString("usuario_login"));
				vo.setClave(rs.getString("clave"));
				vo.setTipoUsuario(rs.getString("TipoUsuario"));	
				vo.setDni(rs.getString("dni"));	
				List.add(vo);
			}
			
		}
		catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return List;		
	}

	public Usuario getUsuario(int idUsuario) throws DAOExcepcion {
		String query;
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		Usuario us = new Usuario();
		
		try {
			con = ConexionBD.obtenerConexion();
			query = "select * from usuario where idusuario=?";
			stmt = con.prepareStatement(query);
			stmt.setInt(1,idUsuario);
			rs = stmt.executeQuery();
			
			while (rs.next()) {
				us.setIdUsuario(rs.getInt("idUsuario"));
				us.setNombres(rs.getString("nombres"));
				us.setDni(rs.getString("dni"));
				us.setEmail(rs.getString("email"));
				us.setDni(rs.getString("dni"));
				us.setTipoUsuario(rs.getString("TipoUsuario"));
				} 
			}catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return us;	
	}
}
